package com.huitongmaoyi.ai.util;

import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 管理在线用户会话，支持多用户同时登录状态跟踪
 */
public class OnlineUserManager {
    // 线程安全的Map存储在线用户（用户名 -> 会话信息）
    private static final Map<String, UserSession> onlineUsers = new ConcurrentHashMap<>();

    /**
     * 用户登录时添加会话
     */
    public static void addSession(String username, PrintWriter out) {
        onlineUsers.put(username, new UserSession(out, LocalDateTime.now()));
    }

    /**
     * 用户退出时移除会话
     */
    public static void removeSession(String username) {
        onlineUsers.remove(username);
    }

    /**
     * 获取用户的输出流（用于消息推送）
     */
    public static PrintWriter getWriter(String username) {
        UserSession session = onlineUsers.get(username);
        return session != null ? session.getOut() : null;
    }

    /**
     * 检查用户是否在线
     */
    public static boolean isOnline(String username) {
        return onlineUsers.containsKey(username);
    }

    /**
     * 获取所有在线用户
     */
    public static Map<String, UserSession> getOnlineUsers() {
        return new ConcurrentHashMap<>(onlineUsers); // 返回副本防止并发修改异常
    }

    /**
     * 会话信息内部类
     */
    public static class UserSession {
        private final PrintWriter out; // 用于向客户端发送消息
        private LocalDateTime lastActiveTime; // 最后活动时间（用于超时检测）

        public UserSession(PrintWriter out, LocalDateTime lastActiveTime) {
            this.out = out;
            this.lastActiveTime = lastActiveTime;
        }

        public PrintWriter getOut() {
            return out;
        }

        public LocalDateTime getLastActiveTime() {
            return lastActiveTime;
        }

        public void updateActiveTime() {
            this.lastActiveTime = LocalDateTime.now();
        }
    }
}